package io.halo.payment.channel.service;

import io.halo.payment.model.HaloPaymentOrder;
import io.halo.payment.model.MchAppConfigContext;
import io.halo.payment.rqrs.request.UnifiedOrderRequest;
import io.halo.payment.rqrs.response.AbstractResponse;

/**
 * 上游渠道支付接口
 *
 * @author: austin
 * @since: 2023/1/11 1:50
 */
public interface IPaymentService {

    /**
     * 获取支付渠道接口标识code
     */
    String getPaymentChannelCode();

    /**
     * 是否支付该支付方式
     */
    boolean isSupport(String wayCode);

    /**
     * 前置检查如参数等信息是否符合要求， 返回错误信息或直接抛出异常即可
     */
    String preCheck();

    /**
     * 调起支付
     *
     * @param request 统一下单RS
     * @param order   支付订单信息
     * @param context 商户应用信息
     * @return
     */
    AbstractResponse pay(UnifiedOrderRequest request, HaloPaymentOrder order, MchAppConfigContext context) throws Exception;
}
